package com.jic.product.service;

import com.jic.common.base.vo.PageResult;
import com.jic.common.base.vo.RestResult;
import com.jic.product.model.entity.MStoreOperateLog;
import com.jic.product.model.vo.request.MStoreOperateRequest;
import com.jic.product.model.vo.response.MStoreCheckResponse;
import com.jic.product.model.vo.response.MStoreOperateResponse;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * MStoreOperate表
 *
 * @author : 建投数据 
 * @version : v1.0.0
 * @email :
 * @since : 2020-03-21 10:12:20
 */
public interface MStoreOperateService {

    /**
     * 保存接口
     * @param request 保存入参
     * @return int 是否保存成功
     * @auther 建投数据科技(山东)有限公司
     * @date 2020-3-11 20:58:44
     */
    int save(MStoreOperateLog request) ;

    /**
     * 保存或修改接口
     * @param request 保存或修改入参
     * @return int 是否保存或修改成功
     * @auther 建投数据科技(山东)有限公司
     * @date 2020-3-11 20:58:44
     */
    Boolean saveOrUpdate( MStoreOperateRequest request) ;

    /**
     * 修改[库存操作流水记录表]的状态;
     * @param request 新增或修改[库存操作流水记录表;]请求参数
     * @return MStoreOperateResponse 修改[库存操作流水记录表]响应参数
     * author 建投数据科技(山东)有限公司
     * @date 2020-3-11 20:54:04
     */
    int updateCheckStatus(MStoreOperateLog request) ;

    /**
     * 删除接口
     * @param request 删除入参
     * @return int 是否物理删除成功
     * @auther 建投数据科技(山东)有限公司
     * @date 2020-3-11 20:58:44
     */
    int deleteByPrimaryKey(MStoreOperateLog request) ;

    /**
     * 删除接口
     * @param request 删除入参
     * @return int 是否逻辑删除成功
     * @auther 建投数据科技(山东)有限公司
     * @date 2020-3-11 20:58:44
     */
    int deleteByPrimaryKeyLogically(MStoreOperateLog request) ;

    /**
     * 修改
     *
     * @param request 修改入参实体类
     * @return int 是否修改成功
     */
    int updateByPrimaryKeySelective(MStoreOperateLog request) ;

    /**
     * 详情
     *
     * @param request 详情查询实体类
     * @return MStoreOperate数据库查询返回的实体类
     *  @auther
     */
    MStoreOperateLog getByPrimaryKey(MStoreOperateLog request);

    /**
     * 分页查询
     *
     * @param request 入参查询实体类
     * @return 数据库查询到的,分页后的实体类列表
     */
    PageResult<MStoreOperateResponse> listPageBySelective(MStoreOperateRequest request, int pageNum, int pageSize);

    /**
     *
     * @param request
     * @param pageNum
     * @param pageSize
     * @return
     */
    PageResult<MStoreOperateResponse> listOpratePageBySelective(MStoreOperateRequest request, int pageNum, int pageSize);


    PageResult<MStoreCheckResponse> listOperateAndProductPage(MStoreOperateRequest request, int pageNum, int pageSize);

    /**
     * 不分页查询
     *
     * @param request 查询入参实体类
     * @return 实体类列表
     */
    List<MStoreOperateLog> listAllRecord(MStoreOperateLog request);

    /**
     * 导入库内事物单详情
     *
     * @return
     */
    RestResult mStoreOperateDetailExcel(String originalFilename, MultipartFile file,Long id) throws IOException;

    /**
     * 实体库存变动流水列表分页查询
     *
     * @param request 入参查询实体类
     * @return 数据库查询到的,分页后的实体类列表
     */
    PageResult<MStoreOperateResponse> operateListPage(MStoreOperateRequest request, int pageNum, int pageSize);

    /**
     * 不分页查询
     *
     * @param request 查询入参实体类
     * @return 实体类列表
     */
    List<MStoreOperateLog> listExcel(MStoreOperateRequest request);

    /**
     * 实体库存变动流水导出（不分页）
     *
     * @param request 入参查询实体类
     * @return 数据库查询到的,分页后的实体类列表
     */
    List<MStoreOperateLog> listMStoreOperateExcel(MStoreOperateRequest request);
}

